Docker Swarm Monitoring Stack
All-in-one monitoring stack for unified application and hardware observability
TL;DR
Docker Swarmμμμ λμνλ μ¬μΈμ λͺ¨λν°λ§ μ€νμ λλ€.ELK Stackμ μ¬μ©νμ¬ λ‘κ·Έλ₯Ό μμ§Β·μ μ Β·μ μ₯Β·μκ°ννκ³PrometheusμGrafanaλ₯Ό μ¬μ©νμ¬ νλμ¨μ΄Β·μ»¨ν μ΄λ λ©νΈλ¦μ μμ§Β·μκ°νν©λλ€.Kubernetesλμ μ΄ μ΄λ €μ΄ νκ²½μμDockerνκ²½κ³Ό ν΅ν©λ Self-hosting λͺ¨λν°λ§ μ€νμ ꡬμΆν μ μλλ‘ μ€κ³νμμ΅λλ€.- μ¬λ΄ μμ€ν κ΅¬μΆ κ²½νμ λ°νμΌλ‘ μ€ν μμ€ μ€νμ λΉλνμ¬ κ³΅κ°νμμ΅λλ€.
κΈ°ν
λ°°κ²½
μ΄ νλ‘μ νΈλ μ κ° μ¬λ΄μμ λ΄λΉνλ μλ‘ λ€λ₯Έ μ±κ²©μ κ°μ§ λ μλΉμ€μ ν΅ν© λͺ¨λν°λ§μ μνμ¬ κ°λ°ν Observability μμ€ν μΌλ‘λΆν° μμλμμ΅λλ€.
첫 λ²μ§Έ μλΉμ€λ μκ° 20λ§ κ±΄ μ΄μμ νΈλμμ λ°μ΄ν°λ₯Ό μ€μκ°μΌλ‘ μ²λ¦¬νλ μλΉμ€λ‘, μ²λ¦¬ κ³Όμ μμ λ¬Έμ κ° λ°μνμ¬ μ²λ¦¬κ° μ€λ¨λ κ²½μ° ν° λ¬Έμ κ° λ°μνλ ν¬λ¦¬ν°μ»¬ν λ°μ΄ν°λ€μ μ²λ¦¬νλ―λ‘ μμ μ μΈ μ΄μμ μνμ¬ λ°μ΄ν° νμ΄νλΌμΈμ 건μ μ±μ νμΈνκ³ λ°μ΄ν° μ΄μμ΄ μλμ§ νμΈν μ μλ 체κ³κ° νμνμμ΅λλ€.
λ λ²μ§Έ μλΉμ€λ μΌκ° 100λ§ κ±΄ μ΄μμ μ‘°ν νΈλν½μ΄ λ°μνλ κ³ λΆν μλΉμ€μ λλ€. κ·Έλ κΈ°μ μλΉμ€μ μμ μ±μ λͺ¨λν°λ§ν νμμ±μ΄ μ‘΄μ¬νμκ³ , λμμ νΈλν½μ λΆμνμ¬ λλ©μΈ κ΄μ μ λ°μ΄ν°λ€μ λ½μλ΄κ³ μ΄λ₯Ό ν΅νμ¬ λΉμ¦λμ€ μΈμ¬μ΄νΈλ₯Ό μ»λ κ²μ λν μμκ° μ‘΄μ¬νμμ΅λλ€.
μμ κ°μ μμλ₯Ό λ§μ‘±νκΈ° μνμ¬ μλ²μ μ ν리μΌμ΄μ μ μνλ₯Ό λͺ¨λν°λ§νκ³ λλ©μΈμ λ°μ΄ν°λ₯Ό μμ§ν μ μλ ν΅ν© Observability μμ€ν μ΄ νμνμμ΅λλ€.
κ·Έλ¬λ νκΈ° λͺ©ν λ¬Έλ¨μμ μ€λͺ νλ― μμ€μλ μ μꡬ μ¬νλ€μ λͺ¨λ λ§μ‘±μν€λ©΄μ κ°νΈνκ² μμ€ν μ ꡬμΆν μ μλ λκ΅¬κ° μ‘΄μ¬νμ§ μμκ³ , μ¬λ΄ μμ€ν μ μ±κ³΅μ μΌλ‘ ꡬμΆν κ²½νμ ν λλ‘ μ§μ μ€ν μμ€ μ€νμ ꡬμΆνμ¬ κ³΅κ°νκ² λμμ΅λλ€.
λͺ©ν
1. λꡬμ ννΈν ν΄κ²°
μμ€μλ νλ₯ν μ€ν μμ€ λͺ¨λν°λ§ λꡬλ€μ΄ λ§μμ§λ§ κ·Έ λꡬλ€μ κ°νΈνκ² ν΅ν©νκ³ μΌκ΄μ μΌλ‘ κ΄λ¦¬ν μ μλ λꡬλ λλ¬Όμμ΅λλ€.
λν, κ°κ°μ λꡬλ€μ Self-hosting λ° μ°κ²°νμ¬ κΈ°μ‘΄ μΈνλΌμ ν΅ν©νκΈ° μν΄μλ λ§μ μΈνλΌμ λ Ένμ°μ μμ λμ μꡬνμκΈ°μ μ λ¬Έ μ§μ μμ΄λ λμ μ΄ μ΄λ €μ μ΅λλ€.
2. 컨ν μ΄λ νκ²½κ³Ό μ€μΌμ€νΈλ μ΄μ λμ
λꡬλ€μ κ°νΈνκ² μ€μΉνκ³ κ΄λ¦¬νκΈ° μν΄μ Docker 컨ν
μ΄λ νκ²½ μμ ꡬμΆνκΈ°λ‘ κ²°μ νμμ΅λλ€. μμ€ν
μμ μ±κ³Ό μν νμ₯μ νΈλ¦¬μ±μ μνμ¬ μ»¨ν
μ΄λ μ€μΌμ€νΈλ μ΄μ
κΈ°μ μ μΆκ°λ‘ λμ
νλ €κ³ νμμΌλ, μ¬λ΄ μΈνλΌ μ¬μ μ Kubernetesλ₯Ό λμ
νκΈ° μ΄λ €μ΄ νκ²½μ΄μμ΅λλ€. κ·Έλ κΈ°μ κΈ°λ³Έ Docker νκ²½κ³Ό μ½κ² ν΅ν©λλ λμμ μ€μΌμ€νΈλ μ΄μ
μ΄ κ°λ₯ν λμμ΄ νμνμ΅λλ€.
3. λ‘κ·Έ λ°μ΄ν° μ²λ¦¬ λμ
μμ€ν μ κΈ°μ‘΄ μ ν리μΌμ΄μ κ³Ό λΉ λ₯΄κ² ν΅ν©νλ ννΈ λ€μν λλ©μΈ λ°μ΄ν°λ₯Ό μ²λ¦¬ν΄μΌ νλλ°, μ΄λ₯Ό μν΄μ μ ν리μΌμ΄μ μ λ‘κ·Έλ₯Ό λΆμν μ μλ μμ€ν μ΄ νμνμ΅λλ€.
λΆλΉ λͺ GBμ© μμ΄λ μ ν리μΌμ΄μ λ‘κ·Έλ₯Ό λΆμνκΈ° μν΄μλ λ€λμ λ‘κ·Έ νΈλν½μ μμ μ μΌλ‘ μ²λ¦¬ν μ μμ΄μΌ νκ³ , λ‘κ·Έλ₯Ό μ¬λ°λ₯Έ ννμ λ°μ΄ν°λ‘ μ μ ν μ μμ΄μΌ νλ©°, λ°μ΄ν°λ₯Ό λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μ μ¬νκ³ μ‘°νν μ μμ΄μΌ νκ³ , μκ°νκ° μ½κ³ κ°νΈν΄μΌ νμ΅λλ€.
κ°λ°
κΈ°μ μ€ν

1. Docker Swarm
Docker Swarmμ μ΄ λͺ¨λν°λ§ μ€ν μ 체λ₯Ό ꡬλνλ 컨ν
μ΄λ μ€μΌμ€νΈλ μ΄μ
λ μ΄μ΄μ
λλ€.
μμμ μΈκΈνμλ― μ¬λ΄ μΈνλΌ μ¬μ μ Kubernetes λμ
μ΄ μ΄λ €μ΄ νκ²½μ΄μκΈ° λλ¬Έμ, κΈ°μ‘΄ Docker νκ²½κ³Ό μ½κ² ν΅ν©λλ©΄μ μ€μΌμ€νΈλ μ΄μ
μ΄ κ°λ₯ν λμμ΄ νμνμμ΅λλ€. Docker μμ§μ ν¬ν¨λ Docker Swarmμ νμ΅ λΆλ΄μ΄ μλμ μΌλ‘ μ μκ³ , μ체μ μΈ μν νμ₯κ³Ό μλΉμ€ λ°°μΉ μ μ΄ κΈ°λ₯λ§μΌλ‘λ λͺ©νν μ΄μ μμ μ±μ λ§μ‘±μν¬ μ μμ΄ μ΄λ₯Ό μ ννμμ΅λλ€.
2. ELK Stack
ELK Stack(Elasticsearch, Logstash, Kibana, Filebeat)μ λ‘κ·Έ λ°μ΄ν°μ μμ§Β·μ μ Β·μ μ₯Β·μ‘°νΒ·μκ°νκΉμ§ μ΄μ΄μ§λ νμ΄νλΌμΈμ λ΄λΉν©λλ€.
μμ νμλ― κ°νΈν ꡬμΆ, λμ©λ λ‘κ·Έ νΈλν½ μ²λ¦¬, λ‘κ·Έμ μ ννΒ·μ μ , λΉ λ₯Έ μ μ¬Β·μ‘°ν, μ¬μ΄ μκ°νλ₯Ό λͺ¨λ λ§μ‘±ν μ μλ κ²μ¦λ μ‘°ν©μ΄ νμνμκ³ , μ€ν μμ€ κΈ°λ° Self-hostingκ³Ό μμ λ‘μ΄ μ»€μ€ν°λ§μ΄μ§μ΄ κ°λ₯νλ©° λ€λ₯Έ μ€νκ³Όμ μ°λμ μ§μ μ§μνλ ELK Stackμ μ ννμμ΅λλ€.
2.1. Nginx
Nginxλ Elasticsearchμ 리λ²μ€ νλ‘μλ‘ λμν©λλ€. Swarm λ΄μμ Elasticsearchλ λ
Έλλ³λ‘ μ¬λ¬ μΈμ€ν΄μ€κ° ν΄λ¬μ€ν°λ§λ ννλ‘ λμνκΈ° λλ¬Έμ Swarm μΈλΆμμ μ κ·Όν μ μλ λ¨μΌ μ§μ
μ μ΄ νμν©λλ€. λν, μΈλΆ μ§μ
μ μ λν μ κ·Ό μ μ΄μ 보μ μ μ±
μ μ€μ ν΄μΌ ν©λλ€. Nginxλ₯Ό 리λ²μ€ νλ‘μλ‘ μ€μ ν¨μΌλ‘μ¨ λ 쑰건μ λͺ¨λ λ§μ‘±μν¬ μ μμ΄ Nginxλ₯Ό μ ννμμ΅λλ€.
2.2. Elastic Agent / Fleet
Elastic Agentλ Beats μ νκ΅°μ ν΅ν©ν λ¨μΌ μμ΄μ νΈλ‘, λμ μλ²μ μ€μΉλμ΄ λ©νΈλ¦(APM, λ‘κ·Έ, νλμ¨μ΄ λ©νΈλ¦)μ ν΅ν© μμ§ν©λλ€. μ€μ μ μ±
μλ²μΈ Fleetκ³Ό μ°λλμ΄, μλ²λ³ μμ§ μ μ±
μ μΌμΌμ΄ μμ ν νμ μμ΄ Kibanaλ₯Ό ν΅ν΄ μ격μΌλ‘ ν΅ν© κ΄λ¦¬ν μ μμ΅λλ€.
νμ¬ ELK Stack μνκ³λ Beats μ νκ΅°μ λμ΄ Elastic Agent + Fleet μν€ν
μ²λ₯Ό μ°¨μΈλ νμ€μΌλ‘ μ±ννλ μΆμΈμ΄λ©°, μ΄μ λ°λ§μΆμ΄ λ³Έ νλ‘μ νΈμμλ μ΅μ μν€ν
μ² μ§μμ μΆκ°νμμ΅λλ€.
2.3. ElastAlert
ElastAlertλ Elasticsearch μΈλ±μ€λ₯Ό μ£ΌκΈ°μ μΌλ‘ μ‘°ννμ¬ κ·μΉ(λΉλ, ν¨ν΄ λ±)μ μΌμΉνλ λ°μ΄ν°κ° μλμ§ κ²μ¬νκ³ , μ‘°κ±΄μ΄ μΆ©μ‘±λλ©΄ μ°κ²°λ μΈλΆ μ±λλ‘ μλ¦Όμ λ°μ‘ν©λλ€. λ°μ΄ν° κΈ°λ°μ μ€μκ° μλ¦Όμ ꡬννλ λ° μ¬μ©νμμ΅λλ€.
Elasticsearchμλ μ체 μλ¦Ό κΈ°λ₯μ΄ μ‘΄μ¬νλ, μ λ£ μλΉμ€λ₯Ό ꡬλ
ν΄μΌλ§ μ΄μ©ν μ μμμ΅λλ€. μλ¦Ό κΈ°λ₯μ μ€ν μμ€ λμμΌλ‘μ ElastAlertλ₯Ό ν΅ν©νμμ΅λλ€.
3. Kafka & Zookeeper
Kafkaλ Filebeatμ Logstash μ¬μ΄μμ λ©μμ§ λ²νΌμ΄μ μ΄λ²€νΈ νμ΄νλΌμΈ μν μ ν©λλ€. λ‘κ·Έλ₯Ό ν ν½ λ¨μλ‘ λ°μ λμλ€κ° Logstashκ° μλΉνλλ‘ νμ¬ μμ§λΆμ μ μ¬λΆλ₯Ό λΆλ¦¬νκ³ , νΈλν½μ΄ κΈμ¦ν΄λ νμ΄νλΌμΈμ΄ λκΈ°μ§ μλλ‘ νμμ΅λλ€.
Zookeeperλ λΆμ° μ½λλ€μ΄μ
μλΉμ€λ‘, ν΄λ¬μ€ν°λ§λ Kafka λΈλ‘컀λ€μ μνλ₯Ό νμΈνμ¬ μ₯μ λ°μ μ Failoverλ₯Ό μ§μν©λλ€.
λ€λμ λ‘κ·Έ λ°μ΄ν°λ₯Ό λ²νΌ μμ΄ Logstashλ‘ μ μ‘νμ μλ² λΆνκ° μ¬ν΄μ Έ, μ€κ°μ λ²νΌ μν μ ν λ°μ΄ν° νμ΄νλΌμΈμ΄ νμνμκ³ ν΄κ²°μ±
μΌλ‘ Kafkaλ₯Ό λμ
νμμ΅λλ€. ꡬ체μ μΈ λ°°κ²½κ³Ό ν΄κ²° κ³Όμ μ μλ νΈλ¬λΈμν
μΉμ
μμ μ€λͺ
νκ² μ΅λλ€.
4. Prometheus & Grafana
Prometheusλ Docker Swarm λ
Έλ μλ²λ€μ μ€μΉν Node Exporter, cAdvisorλ₯Ό ν΅ν΄ νλμ¨μ΄ λ° μ»¨ν
μ΄λ μμ€ν
λ©νΈλ¦μ μμ§νμ¬ μ μ₯νκ³ ,
Grafanaλ μ μ₯λ λ©νΈλ¦μ μ‘°ννμ¬ μλ²μ 컨ν
μ΄λμ 리μμ€ νν©μ μκ°ννμ¬ μ 곡ν©λλ€.
μμ νμλ― μ ν리μΌμ΄μ
λ‘κ·Έμ μλ² νλμ¨μ΄ λ©νΈλ¦μ λ λ€ λͺ¨λν°λ§ν νμκ° μμμΌλ,
μ£Όλ‘ λ¬Έμ λ¨μ μΈλ±μ±μ ν΅ν λλ©μΈμ λ§₯λ½ λΆμμ νΉνλ ELK Stackμμ μκ³μ΄ κΈ°λ°μ νλμ¨μ΄ λ©νΈλ¦μ κ°μ΄ μ²λ¦¬νλ κ²½μ°
리μμ€λ₯Ό λΉν¨μ¨μ μΌλ‘ μ¬μ©νλ λ¬Έμ κ° μμμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μνμ¬ λ©νΈλ¦ μ§κ³μ μ΅μ νλ κ²½λν μ€νμ΄ νμνμκ³ ,
κ²°λ‘ μ μΌλ‘ Prometheusμ Grafanaλ₯Ό μ¬μ©νκ² λμμ΅λλ€. ꡬ체μ μΈ λ°°κ²½κ³Ό ν΄κ²° κ³Όμ μ μλ νΈλ¬λΈμν
μΉμ
μμ μ€λͺ
νκ² μ΅λλ€.
4.1. Node Exporter & cAdvisor
Node Exporterλ κ° Swarm λ
Έλ λ¨μμ μμ€ν
λ©νΈλ¦(CPU, λ©λͺ¨λ¦¬, λ€νΈμν¬ μ¬μ©λ λ±)μ μμ§νμ¬ Prometheusλ‘ μ μ‘ν©λλ€. Prometheus μνκ³μ 곡μ Exporterμ΄κΈ°μ μ°λμ νΈλ¦¬μ±μ κ³ λ €νμ¬ μ ννμμ΅λλ€.
cAdvisorλ κ° λ
Έλμμ λμνλ 컨ν
μ΄λ λ¨μμ μμ€ν
λ©νΈλ¦μ μμ§νμ¬ Prometheusλ‘ μ μ‘ν©λλ€.
Node Exporterκ° μλ² μ 체μ λ©νΈλ¦μ μμ§νλ λμμ cAdvisorκ° μλΉμ€(컨ν
μ΄λ)λ³ λ©νΈλ¦μ μμ§νμ¬ μλ² λ¨μμ μ€μΌμΌλ§ νλ¨κ³Ό 컨ν
μ΄λ λ¨μμ 리μμ€ μ¬μ© μΆμ λͺ¨λλ₯Ό ν μ μλλ‘ μ€κ³νμμ΅λλ€.
μν€ν μ²

μν€ν μ²λ μ ν리μΌμ΄μ μλ², λ°μ΄ν° λ²νΌ μλ², λ‘κ·Έ λͺ¨λν° μλ², λ Έλ λͺ¨λν° μλ²λ‘ ꡬμ±λ©λλ€.
1. μ ν리μΌμ΄μ μλ²
λͺ¨λν°λ§μ λμμ΄ λλ μ ν리μΌμ΄μ
μ μΈμ€ν΄μ€κ° λμνλ μλ²μ
λλ€. κ° μλ²μλ Filebeatμ Elastic Agentκ° μ€μΉλ©λλ€.
Filebeatλ μ ν리μΌμ΄μ
μ΄ μμ±νλ λ‘κ·Έ νμΌμ μ½κ³ , λ©ν λ°μ΄ν°λ₯Ό μΆκ°νμ¬ Kafkaμ μ§μ λ TopicμΌλ‘ μ μ‘ν©λλ€.
μ΄λ, Filebeatλ Kafkaμ λΆν μν©μ λ³΄κ³ λ‘κ·Έ νμΌμ μ½λ μλλ₯Ό μ‘°μ νμ¬ λ€νΈμν¬ κ³ΌλΆνλ₯Ό λ°©μ§ν©λλ€.
Elastic Agentλ Filebeatλ₯Ό λΉλ‘―ν Beats μ리μ¦λ₯Ό ν΅ν©ν μ°¨μΈλ λ©νΈλ¦ μμ§ μμ΄μ νΈλ‘, μ€μ μ μ±
μλ² Fleetμ μ μ±
μ λ§μΆμ΄ λ°μ΄ν°λ₯Ό μμ§ λ° μ μ‘ν©λλ€.
λ³Έ νλ‘μ νΈμμλ Fleet μλ²λ₯Ό μ€νμ μΆκ°νμ¬ Elastic Agent μν€ν
μ²λ‘μ μ νμ μ§μνκ³ μμΌλ, κΈ°λ³Έ λ‘κ·Έ μμ§κΈ°λ‘λ Filebeatλ₯Ό μ¬μ©νκ³ μμ΅λλ€.
2. λ°μ΄ν° λ²νΌ μλ²
μ ν리μΌμ΄μ
μλ²μ λ‘κ·Έ λͺ¨λν° μλ² μ¬μ΄μμ μ²λ¦¬ λΆνλ₯Ό μ‘°μ νλ λ°μ΄ν° λ²νΌ μν μ νλ μλ²λ‘, Kafkaμ Zookeeperκ° λ°°μΉλ©λλ€.
Kafkaλ Filebeatμμ μ λ¬ν λ‘κ·Έ λ°μ΄ν°λ₯Ό μ‘μ νμ¬ Topicλ³ λ©μμ§λ‘μ λΆλ₯ λ° μ μ₯νκ³ , Consumer - Logstashκ° λ°μ΄ν°λ₯Ό μμ²ν μ μ λ¬ν΄μ£Όλ λ°μ΄ν° λ²νΌ μν μ ν©λλ€.
Zookeeperλ Kafka ν΄λ¬μ€ν°μ λ©νλ°μ΄ν°λ₯Ό κ΄λ¦¬νκ³ , λΈλ‘컀λ€μ μνλ₯Ό μ½λλ€μ΄μ
νλ μν μ ν©λλ€.
λ³Έ νλ‘μ νΈμμλ ꡬμ±μ νΈμμ±μ κ³ λ €νμ¬ ν΄λ¬μ€ν°λ§μ μ€μ νμ§ μμμΌλ©°, μ°¨ν λ³λλ‘ νμ₯ν μ μλλ‘ Docker Composeλ‘ λ¬Άμ λ¨μΌ Kafkaμ Zookeeperλ₯Ό μ¬μ©νλλ‘ κ΅¬μ±νμμ΅λλ€.
3. λ‘κ·Έ λͺ¨λν° μλ²
λ‘κ·Έ λ°μ΄ν°μ μμ§Β·μ μ Β·μ μ₯Β·μ‘°νΒ·μκ°νλ₯Ό μ²λ¦¬νλ μλ²μ
λλ€. λ°μ΄ν° μ²λ¦¬λ₯Ό λ΄λΉνλ ELK Stack, Nginx, Fleet λ±μΌλ‘ ꡬμ±λ©λλ€.
ELK Stackμ Logstash, Elasticsearch, Kibanaλ‘ κ΅¬μ±λ©λλ€.
Logstashλ Kafkaμμ λ‘κ·Έ λ°μ΄ν°λ₯Ό κ°μ Έμ¨ λ€ μ ν΄μ§ νμμ λ§κ² κ°κ³΅νμ¬ Elasticsearchμ μ λ¬νλ μν μ ν©λλ€.
μ¬λ¬ Topicμ ν΅ν΄ λ€μ΄μ€λ λλμ λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° μν΄μλ μ μ°ν Scale-outμ΄ νμνλ―λ‘ μ¬λ¬ λ
Έλλ₯Ό μ μ νλ ννλ‘ κ΅¬μ±νμμ΅λλ€.
Elasticsearchλ λ‘κ·Έ λ°μ΄ν°λ₯Ό λ¬Έμ νμμΌλ‘ μ μ₯ λ° μΈλ±μ±νμ¬ λ°μ΄ν° μμ€μ μ 곡ν©λλ€. Logstashμ λ§μ°¬κ°μ§λ‘ μ μ°ν Scale-out μ§μμ μνμ¬ ν΄λ¬μ€ν°λ§μ μ§μνμμ΅λλ€. λν, Nginxλ₯Ό 리λ²μ€ νλ‘μλ‘ λ μΌλ‘μ¨ μΈλΆ μ κ·Όμ λν λ¨μΌ μ§μ
μ μ μ 곡ν¨κ³Ό λμμ 보μμ κ°μΆ μ μλλ‘ νμμ΅λλ€.
Fleetμ μμ μ΄μΌκΈ°ν Elastic Agentμ μ€μ ν΅μ μλ²λ‘ μμ§ μ μ±
μ μΌκ΄ κ΄λ¦¬νλ μν μ ν©λλ€. Elastic Agent κΈ°λ° μν€ν
μ²λ‘μ λ§μ΄κ·Έλ μ΄μ
μ μ§μνκΈ° μνμ¬ μΆκ°νμμ΅λλ€.
Kibanaλ Elasticsearchμ μΈλ±μ±λμ΄ μλ λ‘κ·Έ λ°μ΄ν°λ₯Ό μκ°ννκ³ UIλ₯Ό ν΅ν΄ ELK Stackμ ν΅ν© κ΄λ¦¬ν μ μκ² ν©λλ€.
4. λ Έλ λͺ¨λν° μλ²
νλμ¨μ΄ λ° μ»¨ν μ΄λ λ©νΈλ¦μ μμ§Β·μ μ₯Β·μκ°νλ₯Ό λ΄λΉνλ μλ²μ λλ€.
κ° Swarm λ
Έλμ μ€μΉλ Node Exporterλ νΈμ€νΈ(μλ²)μ μμ€ν
λ©νΈλ¦μ, cAdvisorλ 컨ν
μ΄λμ 리μμ€ μ¬μ© λ©νΈλ¦μ μμ§νμ¬ Prometheusμκ² μ μ‘ν©λλ€. μ¬λ¬ 컨ν
μ΄λ μΈμ€ν΄μ€κ° ν¨κ» λμνλ λ³Έ νλ‘μ νΈμ μν€ν
μ² μ, μλ² νλμ¨μ΄μ λ³κ°λ‘ 컨ν
μ΄λλ³ λ¦¬μμ€ μ¬μ©λλ λͺ¨λν°λ§ν νμλ₯Ό λκΌκΈ°μ λμ
νκ² λμμ΅λλ€.
Prometheusλ μκ³μ΄ νμμ λ
Έλ λͺ¨λν°λ§ λ©νΈλ¦μ μμ§ λ° μ μ₯ν©λλ€. Node Exporter, cAdvisorλ₯Ό λΉλ‘―ν μλΉμ€λ€μ μλν¬μΈνΈμμ λ©νΈλ¦μ κ°μ Έμ μκ³μ΄ λ°μ΄ν° μ²λ¦¬μ μ΅μ νλ λ°©μμΌλ‘ μμΆ λ° μ μ₯ν©λλ€.
Grafanaλ Prometheusμ μ μ₯λ μκ³μ΄ λ©νΈλ¦ λ°μ΄ν°λ₯Ό λμ보λ ννλ‘ μκ°ννμ¬ μ 곡ν©λλ€.
νΈλ¬λΈ μν
μμ μ΄μΌκΈ°νμλ―, λ³Έ νλ‘μ νΈ κ΅¬μΆμλ λμ©λμ λ‘κ·Έ λ°μ΄ν° μ²λ¦¬ λ± μ¬λ¬ μ μ½ μ¬νμ΄ λ°λμ΅λλ€. μ΄λ₯Ό ν΄κ²°νλ κ³Όμ μμ μ΄λ€ λ¬Έμ κ° λ°μνκ³ , μ΄λ»κ² νμ΄λλμ§μ λν κ²½νμ 곡μ νκ² μ΅λλ€.
1. λ‘κ·Έ λ°μ΄ν° μ²λ¦¬ κ³ΌλΆν
μμ μ€λͺ νμλ―, μ²λ¦¬ν΄μΌ νλ λ‘κ·Έ λ°μ΄ν°λ λΆλΉ λͺλ°± MBμμ λ§κ²λ GBμ λ¬νλ ν° μ©λμ κ°μ§ λ°μ΄ν°μμ΅λλ€.
첫 κ΅¬μΆ μ μ΄λ¬ν λμ©λ λ°μ΄ν°λ₯Ό λ³λμ λ°μ΄ν° λ²νΌ μμ΄ Filebeatμμ Logstashλ‘ λ°λ‘ μ μ‘νμλλ°,
Logstashμ κ°μ©λμ λλ λ°μ΄ν°λ€μ μ§μμ μΌλ‘ μ²λ¦¬ν μ μμκΈ°μ μ μ μ±λ₯μ΄ μ νλμκ³ κ²°κ΅ κ³ΌλΆνλ‘ μΈνμ¬ μ²λ¦¬κ° λ©μΆ° λ²λ¦¬λ λ¬Έμ κ° μμμ΅λλ€.
μ°¨ν λ λ§μ μλΉμ€λ‘ νμ₯ν κ³νμ΄ μμκΈ°μ λ¨μν μλ² Scale-out보λ€λ μ²λ¦¬ λΆνμ μκΈ μ‘°μ μ΄ νμνλ€κ³ μκ°νμκ³ , λ‘κ·Έ νμ΄νλΌμΈ μ€κ°μ λ°μ΄ν° λ²νΌ μν μ ν΄μ€ λ μ΄μ΄λ₯Ό λμ νκΈ°λ‘ κ²°μ νμμ΅λλ€.
λ°μ΄ν° λ²νΌ μ ν μ, λ κ°μ§ κ΄μ μ κ³ λ €νμ΅λλ€.
첫 λ²μ§Έλ μ΄μ μμ μ±μ΄μμ΅λλ€. λ‘κ·Έ λ°μ΄ν°μ λͺ¨λ νλ¦μ μ€κ°μμ μ μ΄νλ μ€μν μν μ΄κΈ°μ μ₯μ λ°μ μ Failoverκ° κ°λ₯ν΄μΌ νμΌλ©°, μΆκ° μμκ° μꡬλ κ²½μ° μΈμ λ Scale-outν μ μμ΄μΌ νκ³ , 컨μλ¨Έμ λΆνμ λ§μΆμ΄ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμ΄μΌ νκ³ , κΈ°μ‘΄ μν€ν μ²μ κ°νΈνκ² ν΅ν©ν μ μμ΄μΌ νμ΅λλ€.
λ λ²μ§Έλ νλ¦ μ μ΄ κΈ°λ₯μ΄μμ΅λλ€. κ°μ λ€λ₯Έ μ²λ¦¬ λ°©μκ³Ό λλ©μΈμ λΆλ₯λ₯Ό μꡬνλ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ, λͺ¨λ μ¬μ© μ¬λ‘μ λν λ²μ©μ μΈ νν°λ§ λ°©μ보λ€λ λΆλ₯λ³λ‘ κ·μΉμ μ νκ³ , μ΄μ λ°λΌ κ°λ³μ μΌλ‘ λ°μ΄ν°λ₯Ό μμ°νκ³ μλΉνλ λ°©μμ΄ λ νμ₯μ± μκ³ μ§κ΄μ μΈ λ°©μμ΄λΌκ³ μκ°νμμ΅λλ€. λ°λΌμ, κΈ°μ€μ λ°λΌ λ°μ΄ν°λ₯Ό λΆλ₯νκ³ μμ° λ° μλΉν μ μλ κΈ°λ₯μ΄ νμνμ΅λλ€.
μ¬λ¬ μ νμ§λ€μ κ³ λ €ν κ²°κ³Ό, λ κ°μ§ κ΄μ μ λͺ¨λ μΆ©μ‘±ν μ μλ Kafkaλ₯Ό μ ννμμ΅λλ€.
μ΄μ μμ μ± μΈ‘λ©΄
| μꡬ μ¬ν | ν΄κ²° λ°©μ |
|---|---|
| Failover | Replication κ΅¬μ‘°λ‘ μ₯μ μμλ λ°μ΄ν° μ μ€ μμ΄ λ¬΄μ€λ¨ μ΄μ κ°λ₯ |
| Scale-out | νΈλν½ μ¦κ° μ λΈλ‘컀 λ° νν°μ νμ₯μ ν΅ν Scale-out κ°λ₯ |
| 컨μλ¨Έ λΆν κ³ λ € | 컨μλ¨Έκ° μ²λ¦¬ κ°λ₯ν λ§νΌ λ©μμ§λ₯Ό μλΉν μ μλ Pull λͺ¨λΈ |
| κΈ°μ‘΄ μν€ν μ² ν΅ν© μ§μ | ELK Stackμ Kafka μ°λ 곡μ μ§μ |
νλ¦ μ μ΄ κΈ°λ₯ μΈ‘λ©΄
| μꡬ μ¬ν | ν΄κ²° λ°©μ |
|---|---|
| λ°μ΄ν° μμ° λΆλ₯ | Topic λ¨μ Producer λ°μ΄ν° μμ |
| λ°μ΄ν° μλΉ λΆλ₯ | Topic / μ체 κ·μΉ κΈ°λ° Consumer λ©μμ§ μλΉ |
Kafka λμ
μΌλ‘ Logstashμ κ°ν΄μ§λ λΆνκ° κ°μ©λμ λμ§ μλλ‘ μ νν μ μμκ³ ,
λλ©μΈ κ·μΉμ λ°λΌ Logstashλ₯Ό λΆλ₯νκ³ , μ¬μ©λμ λ°λΌ νμ₯ν μ μκ² λμ΄ μ²λ¦¬λμ λ°λ₯Έ μ λμ μΈ νμ₯μ΄ κ°λ₯νλλ‘ μν€ν
μ²λ₯Ό μ¬νΈν μ μμμ΅λλ€.
2. λ¬΄κ±°μ΄ νλμ¨μ΄ λ©νΈλ¦ μ²λ¦¬
μμ μ€λͺ
νμλ―, μ΄ μμ€ν
μ λ‘κ·Έ λ°μ΄ν°μ μλ²(μ ν리μΌμ΄μ
)μ μν(μ¦, νλμ¨μ΄ λ©νΈλ¦)λΌλ λ κ°μ§ μ’
λ₯μ λ°μ΄ν°λ₯Ό λ λ€ μ²λ¦¬ν μ μμ΄μΌ νμ΅λλ€.
첫 κ΅¬μΆ μμλ Metricbeatμμ νλμ¨μ΄ λ©νΈλ¦μ μμ§νλ λ°©μμΌλ‘ ELK Stackμμ νλμ¨μ΄ λ©νΈλ¦κΉμ§ μ λΆ λ΄λΉνμλλ°, μ΄λ΄ κ²½μ° λ κ°μ§ λ¬Έμ κ° λ°μνμμ΅λλ€.
첫 λ²μ§Έλ λ°μ΄ν° μ μ₯ λ°©λ©΄μ λ¬Έμ μ
λλ€. λ€λ₯Έ μ±κ²©μ κ°μ§ λ‘κ·Έμ νλμ¨μ΄ λ©νΈλ¦ λ°μ΄ν°κ° κ°μ Elasticsearch ν΄λ¬μ€ν°λ₯Ό 곡μ ν¨μ λ°λ₯Έ 리μμ€ λ¬Έμ κ° λ°μνμ΅λλ€.
λ‘κ·Έλ λλ©μΈ/μ΄μμ λΆλ₯μ λ°λΌ λ€μν μ μ₯ λ°©μκ³Ό μΈλ±μ± νμμ±μ κ°κΈ°μ μ΄λ²€νΈμ λ°λ₯Έ λ¬Έμ λ¨μ μ²λ¦¬(κ²μ, νν°, μ§κ³)κ° νμν λ°μ΄ν°μΈ λ°λ©΄,
νλμ¨μ΄ λ©νΈλ¦μ λΉμ μν©μ λνλ΄λ λ¨μ μκ³μ΄ μ«μ λ°μ΄ν°μ΄κ³ , μ©λμ΄ κ±°λν λ° λΉνμ¬ λ°μ΄ν°μ μ ν¨ κΈ°κ°μ΄ κΈΈμ§ μκΈ°μ μκ³μ΄ μ§κ³ μΈμ λΆκ°μ μΈ μ²λ¦¬κ° νμνμ§ μμ΅λλ€.
κ·Έλ°λ°, Elasticsearch νκ²½μμλ νλμ¨μ΄ λ©νΈλ¦λ λ€λ₯Έ λ°μ΄ν°λ€κ³Ό λμΌνκ² λ¬Έμ λ°©μμΌλ‘ μ μ₯ λ° μΈλ±μ±νκΈ°μ μ²λ¦¬ μ€λ²ν€λκ° μ»€μ‘κ³ , λ‘κ·Έ μΈλ±μ± μ²λ¦¬λμ μ μνλ λ¬Έμ κ° μμμ΅λλ€.
λν, 보쑴 κΈ°κ°μ΄ κΈΈμ΄μ§μλ‘ ν΄λ¬μ€ν°μ λΆνλ λ 컀μ‘κΈ°μ νλμ¨μ΄ λ©νΈλ¦μ μ₯κΈ° μ μ₯νκΈ° μ΄λ €μ μ΅λλ€.
λ λ²μ§Έλ λ°μ΄ν° μκ°ν λ°©λ©΄μ λ¬Έμ μ
λλ€. λ§μ°¬κ°μ§λ‘ λ€λ₯Έ μ±κ²©μ κ°μ§ λ°μ΄ν°κ° Kibanaλ₯Ό 곡μ ν¨μ λ°λ₯Έ 리μμ€ λ¬Έμ κ° λ°μνμμ΅λλ€.
λͺ¨λ λ°μ΄ν°λ₯Ό Kibanaμμ μκ°ννκΈ°μ μ§§μ ꡬκ°μ μκ³μ΄ λ°μ΄ν°λ₯Ό μ§μμ μΌλ‘ μΆλ ₯ν΄μΌ νλ νλμ¨μ΄ λ©νΈλ¦κ³Ό
λλ©μΈ/μ΄μμ νμμ μνμ¬ λμ λ²μμ μ¬λ¬ ννλ₯Ό κ°μ§ λ°μ΄ν°λ₯Ό μΆλ ₯ν΄μΌ νλ λ‘κ·Έ λ°μ΄ν°μ μκ°νκ° λμΌν μμμ 곡μ νκ² λμκ³ ,
νμͺ½ νΈλν½μ΄ λ§μ λ λ€λ₯Έ μͺ½ λμ보λ μλ΅μ΄ λλ €μ§λ νμμ΄ λ°μνμμ΅λλ€.
λ¨μν μ»΄ν¨ν
μμ νμ₯λ§μΌλ‘λ μ΄λ¬ν κ·Όλ³Έμ μΈ λ°μ΄ν° μ±κ²© μ°¨μ΄μ μν¬λ‘λ νΌν© λ¬Έμ λ₯Ό ν΄κ²°ν μ μμμ΅λλ€. κ·Έλ κΈ°μ κΈ°μ‘΄ ELK Stackμμ νλμ¨μ΄ λ©νΈλ¦ μ²λ¦¬λ₯Ό λ³λλ‘ λΆλ¦¬ν΄μΌ νκ³ ,
μκ³μ΄ λ°μ΄ν° μ²λ¦¬μ μ΅μ νλ κ²½λν λ°μ΄ν°λ² μ΄μ€μ μκ°ν λκ΅¬κ° νμνμ΅λλ€. κ²°κ³Όμ μΌλ‘, Prometheusμ Grafanaλ₯Ό μ ννκ² λμμ΅λλ€.
λ°μ΄ν° μ μ₯ μΈ‘λ©΄ - Prometheus
| μꡬ μ¬ν | ν΄κ²° λ°©μ |
|---|---|
| μκ³μ΄ λ°μ΄ν° μ μ₯ μ΅μ ν | TSDB κΈ°λ°μ μκ³μ΄ μ΅μ ν μ°κΈ° λ°©μκ³Ό μμΆ μκ³ λ¦¬μ¦ μ μ©μΌλ‘ μνλΉ νκ· 1.3 Byte μμ€μ μ μ₯ μ©λ μμΆ |
| μΈλ±μ± μ€λ²ν€λ μ κ±° | Label κΈ°λ° λ€μ°¨μ λ°μ΄ν° λͺ¨λΈ μ¬μ©μΌλ‘ I/O 리μμ€ μ΅μν |
| μ₯κΈ° 보쑴 λΆλ΄ μν | JSON λ¬Έμ λ¨μκ° μλ λ¨μ Float64 / Timestamp μμΉ λ°μ΄ν° μμ£Ό μ μ₯μΌλ‘ λμ€ν¬ λ° μ€ν λ¦¬μ§ λΉμ© μ κ° |
λ°μ΄ν° μκ°ν μΈ‘λ©΄ - Grafana
| μꡬ μ¬ν | ν΄κ²° λ°©μ |
|---|---|
| μκ³μ΄ μ‘°ν μ±λ₯ μ΅μ ν | μμΉ μ°μ° & μ§κ³μ νΉνλ PromQL μ¬μ©μΌλ‘ μ μ λΆνλ‘ λλμ λ©νΈλ¦ λ°μ΄ν° μ€μκ° λ λλ§ |
| λμ λμ보λ κ΅¬μ± | νΈμ€νΈλ 컨ν μ΄λκ° μμλ‘ λ³κ²½λλ λμ νκ²½μμλ μ μ°ν λ°μ΄ν° νν°λ§ λ° μκ°ν κ°λ₯ |
Prometheus & Grafanaμ λμ
μ ν΅ν΄ λ€λ₯Έ μ±κ²©μ κ°μ§ λ‘κ·Έ λ°μ΄ν°μ νλμ¨μ΄ λ©νΈλ¦μ 물리μ μΌλ‘ λΆλ¦¬ν μ μμμ΅λλ€.
μ΄λ₯Ό ν΅ν΄ ELK Stack ν΄λ¬μ€ν°μ λΆνλ₯Ό κ²½κ°νκ³ , κ° λ°μ΄ν°μ μ±κ²©μ λ§λ μν¬νλ‘μ°λ₯Ό μ€μ ν¨μΌλ‘μ¨ μ μ₯ λ° μκ°ν λΉμ©μ μ κ°νλ λμμ νμ₯μ±μ λμΌ μ μμμ΅λλ€.
κ²°κ³Ό

λͺ¨λν°λ§ μ€νμ ꡬμΆνμ¬ μ±κ³΅μ μΌλ‘ μ¬λ΄ μμ€ν μ λμ ν μ΄ν, μ΄μ κ²½νμ ν λλ‘ λ²μ©μ μΌλ‘ μ¬μ©ν μ μλ μ€νμ ꡬμΆνμ¬ μ€ν μμ€λ‘ 곡κ°νμμ΅λλ€.
κ³΅κ° μ΄ν, λͺ¨λν°λ§μ νμν λ€μν μ¬μ© μ¬λ‘λ€μ μ§μνκΈ° μνμ¬ Self-hosting νκ²½μ μ§μνλ μ€ν μμ€ μ€νλ€μ μ§μμ μΌλ‘ ν΅ν©νκ³ μμ΅λλ€.
λ§μΉλ©°
λ»κΉμ 첫 μ€ν μμ€ κ°λ° κ²½νμ΄μμ΅λλ€. μ€μ λ¬Έμ μ μ μ°Ύμλ΄κ³ ν΄κ²°νμ¬ κ³΅κ°νλ κ³Όμ μμ λ²μ©μ μΌλ‘ μ μ©ν μ μλ λ¬Έμ ν΄κ²° λ°©μκ³Ό κ°λ°μ κ²½ν μ΅μ νμ λνμ¬ λ§μ΄ κ³ λ €ν μ μμκ³ , μ€ν μμ€ κ°λ°μ λ§₯λ½μ λν΄μλ μ΄ν΄ν μ μλ κ²½νμ΄ λμμ΅λλ€.
μ λ μμΌλ‘λ μ κ° κ²ͺμ λ¬Έμ λ€μ ν΄κ²° κ²½νμ 곡μ νμ¬ κΎΈμ€ν κ°λ°μ μνκ³μ κΈ°μ¬νλ €κ³ ν©λλ€. κ°μ¬ν©λλ€.